// pages/personInfo/personInfo.js
import WxValidate from '../../utils/WxValidate'
import utils from "../../utils/util"
const app = getApp()
Page({
  /**
   * 页面的初始数据
   */
  data: {
    userInfo: null,
  },

  // 跳转
  selectAddress(){
    wx.navigateTo({
      url: '../address/address',
    })
  },

  //注销登录 
  quit() {
    wx.removeStorageSync('userInfo');
    app.globalData.userInfo = null;
    wx.switchTab({
      url: '../person/person',
    }).then(res => {
      utils.pageOnLoad()
    })
  },

  // 定时器id
  timeID: 0,
  handleInput(e) {
    console.log(e)
    const {name} = e.currentTarget.dataset
    const value = e.detail.value
    clearTimeout(this.timeID)
    this.timeID = setTimeout(() => {
      if (name === 'nickName') {
        this.setData({
          "userInfo.nickName": value
        })
      } else {
        this.setData({
          "userInfo.phone": value
        })
      }

    }, 1000)
  },

  //保存表单 
  submitForm() {
    //params保存需要验证的数据对象 
    const params = this.data.userInfo
    //表单验证 
    if (!this.WxValidate.checkForm(params)) {
      const error = this.WxValidate.errorList[0];
      this.showValidateModal(error);
      return false;
    }
    //表单验证完毕，接下来向后端发送数据
    //加载中 
    wx.showLoading()
    //向服务端发送请求 
    wx.request({
      url: `${app.globalData.server}/wxUpdateUserInfo`,
      method: 'POST',
      data: {
        openid: params.openid,
        avatarUrl: params.avatarUrl,
        nickName: params.nickName,
        phone: params.phone
      },
      success: res => {
        wx.hideLoading()
        //console.log(res) 
        if (res.data.status === 'success') {
          //更新缓存 
          wx.setStorageSync('userInfo', res.data.result)
          //更新全局变量 
          app.globalData.userInfo = res.data.result
          //提示 
          wx.showToast({
            title: '修改成功',
            icon: 'success'
          })
          //跳转至个人中心页面 
          setTimeout(() => {
            wx.switchTab({
              url: '../person/person',
            })
          }, 1000)
        } else {
          //提示 
          wx.showToast({
            title: '修改失败',
            icon: 'error'
          })
        }
      },
      fail: err => {
        wx.hideLoading()
        console.log(err)
        //提示 
        wx.showToast({
          title: '修改失败',
          icon: 'error'
        })
      }
    })
  },

  // 上传头像
  updataAvatar() {
    wx.chooseMedia({
      count: 1,
      mediaType: ['image'],
      sourceType: ['album', 'camera'],
      sizeType: ['original', 'compressed'],
      success: (res) => {
        //chooseMedia成功回调 
        wx.showLoading({
          title: '上传中'
        })
        //使用wx.uploadFile将图片发至服务端上传 
        wx.uploadFile({
          filePath: res.tempFiles[0].tempFilePath,
          //文件暂存路径 
          name: 'img',
          //文件对应的 key 
          url: `${app.globalData.server}/uploadImg`,
          //服务端路由 
          success: (result) => {
            //成功回调 
            //result.data为字符串，使用JSON.parse转成对象 
            let filePath = JSON.parse(result.data).path;
            //文件路径为\反斜杠，需要转为斜杠/，使用正则表达式进行过滤转换 
            filePath = filePath.replace(/\\/g, '/');
            //console.log(filePath) 
            let userInfo = this.data.userInfo;
            //将完整的文件路径（含有域名信息）赋值给userInfo 
            userInfo.avatarUrl = `${app.globalData.server}/${filePath}`;
            this.setData({
              userInfo
            })
            wx.hideLoading({})
            wx.showToast({
              title: '上传成功',
              icon: "success"
            })
          },
          fail: (e) => {
            //失败回调 
            console.log(e)
            wx.hideLoading({})
            wx.showToast({
              title: '上传失败',
              icon: "error"
            })
          }
        })
      },
      fail: error => {
        //chooseMedia失败回调 
        console.log(error)
        wx.showToast({
          title: '上传失败',
          icon: "error"
        })
      }
    })
  },

  /**
   * 生命周期函数--监听页面加载
   */
  onLoad(options) {
    const userInfo = wx.getStorageSync('userInfo')
    //读取缓存中的userInfo 
    this.setData({
      userInfo
    })
    //加载表单验证规则 
    this.initValidate();
  },

  //初始化验证规则 
  initValidate() {
    // 验证字段的规则 
    const rules = {
      nickName: {
        required: true,
        maxlength: 10
      },
      phone: {
        required: true,
        tel: true
      }
    }
    // 验证字段的提示信息，若不传则调用默认的信息 
    const messages = {
      nickName: {
        required: '请输入昵称',
        maxlength: '昵称不能超过10个字符'
      },
      phone: {
        required: '请输入手机号',
        tel: '请输入正确的手机号码'
      }
    }
    // 创建实例对象 
    this.WxValidate = new WxValidate(rules, messages)
  },

  //表单验证错误提示 
  showValidateModal(error) {
    wx.showModal({
      content: error.msg,
      showCancel: false,
    })
  },
  /**
   * 生命周期函数--监听页面初次渲染完成
   */
  onReady() {

  },

  /**
   * 生命周期函数--监听页面显示
   */
  onShow() {

  },

  /**
   * 生命周期函数--监听页面隐藏
   */
  onHide() {

  },

  /**
   * 生命周期函数--监听页面卸载
   */
  onUnload() {

  },

  /**
   * 页面相关事件处理函数--监听用户下拉动作
   */
  onPullDownRefresh() {

  },

  /**
   * 页面上拉触底事件的处理函数
   */
  onReachBottom() {

  },

  /**
   * 用户点击右上角分享
   */
  onShareAppMessage() {

  }
})